﻿using System;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
using TTQT;
using TTQT.TTQT_Code;
using MyWebUtils;

public partial class XuatKho : MasterControl //System.Web.UI.UserControl
{
    private void bindLoaiGiaoDich()
    {
        //Kiểm tra xuất phân phối: Chỉ những user có mà kho của nó(bảng MaKho) có tính chất kho =1 (MaKho.TinhChatKho=1) hoặc MaKho.CapQuanLy=1
        cboLoaiGiaoDich.Items.Remove(cboLoaiGiaoDich.Items.FindByValue("2"));
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            bindLoaiGiaoDich();
            txtNam.Text = DateTime.Now.Year.ToString();
            txtNgayXuat.Value = DateTime.Now.ToString("dd/MM/yyyy");
            txtNgayXuatThucTe.Value = DateTime.Now.ToString("dd/MM/yyyy");
            txtNgayNhan.Value = DateTime.Now.ToString("dd/MM/yyyy");
            txtNgayNhanThucTe.Value = DateTime.Now.ToString("dd/MM/yyyy");
            hienPanel(true, false, false, false);
        }
    }
    private void hienPanel(bool gridMaster, bool editMaster, bool gridDetail, bool editDetail)
    {
        pnGridMaster.Visible = gridMaster;
        pnEditMaster.Visible = editMaster;
        pnGridDetail.Visible = gridDetail;
        pnEditDetail.Visible = editDetail;
        lblError.Text = editMaster == false ? "" : lblError.Text;
        lblKetQuaInsert.Text = editMaster == false ? "" : lblKetQuaInsert.Text;
    }
    protected void masterGrid_ItemCommand(object source, DataGridCommandEventArgs e)
    {
        try
        {
            if (e.CommandName == "cmdEdit")
            {
                lblMaHoaDon.Text = e.Item.Cells[0].Text;
                ds.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;
                ds.SelectCommand = "HoaDon_Master_GetByMaHoaDon";
                ds.SelectParameters.Clear();
                ds.SelectParameters.Add(new Parameter("mahoadon"));
                ds.SelectParameters["mahoadon"].DefaultValue = e.Item.Cells[0].Text;

                DataTable rs = ((DataView)ds.Select(System.Web.UI.DataSourceSelectArguments.Empty)).ToTable();
                if (rs != null)
                {
                    lblMaHoaDon.Text = rs.Rows[0]["MaHoaDon"].ToString();
                    try
                    {
                        cboLoaiGiaoDich.SelectedValue = rs.Rows[0]["LoaiGiaoDich"].ToString();
                    }
                    catch { }
                    txtNam.Text = rs.Rows[0]["Nam"].ToString();
                    txtNgayXuat.Value = rs.Rows[0]["NgayXuat"].ToString();
                    txtNgayXuatThucTe.Value = rs.Rows[0]["NgayXuatThucTe"].ToString();
                    txtNgayNhan.Value = rs.Rows[0]["NgayNhan"].ToString();
                    txtNgayNhanThucTe.Value = rs.Rows[0]["NgayNhanThucTe"].ToString();
                    txtNoiDung.Text = rs.Rows[0]["NoiDung"].ToString();
                    cboKhoNhan.SelectedValue = rs.Rows[0]["KhoNhan"].ToString();
                    cboNguoiNhan.SelectedValue = rs.Rows[0]["UserNhan"].ToString();
                }
                hienPanel(false, true, true, false);
            }
            else if (e.CommandName == "cmdDelete")
            {
                ds.DeleteCommand = "delete HoaDon_Master where mahoadon ='" + e.Item.Cells[0].Text.Trim() + "'";
                ds.Delete();
                masterGrid.DataBind();
            }
        }
        catch (SqlException ex)
        {
        }
    }

    protected void masterGrid_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
        if (e.Item.ItemIndex < 0) return;
        Button cmdDel = (Button)e.Item.FindControl("cmdDelete");
        if (cmdDel != null) cmdDel.Attributes.Add("onclick", TTQTCommon.delete_Confirm);
    }

    protected void masterGrid_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
    {
        masterGrid.CurrentPageIndex = e.NewPageIndex;
        masterGrid.DataBind();
    }

    protected void detailGrid_ItemCommand(object source, DataGridCommandEventArgs e)
    {
        MyWebUtil.goToElement(Page, "chiTietHoaDon");
        try
        {
            if (e.CommandName == "cmdEdit")
            {
                ds.SelectCommandType = SqlDataSourceCommandType.Text;
                ds.SelectCommand = "Select * from HoaDon_Detail where id='" + e.Item.Cells[0].Text + "'";
                DataTable rs = ((DataView)ds.Select(System.Web.UI.DataSourceSelectArguments.Empty)).ToTable();
                cboMaAnChi.SelectedValue = rs.Rows[0]["MaAnChi"].ToString();

            }
            else if (e.CommandName == "cmdDelete")
            {
                ds.DeleteCommandType = SqlDataSourceCommandType.StoredProcedure;
                ds.DeleteCommand = "HoaDon_Detail_Delete1";
                ds.DeleteParameters.Clear();

                ds.DeleteParameters.Add(new Parameter("id"));
                ds.DeleteParameters["id"].DefaultValue = e.Item.Cells[0].Text;

                ds.DeleteParameters.Add(new Parameter("seriDau"));
                ds.DeleteParameters["seriDau"].DefaultValue = e.Item.Cells[1].Text.Trim() + e.Item.Cells[2].Text.Trim().PadLeft(7, '0');

                ds.DeleteParameters.Add(new Parameter("seriCuoi"));
                ds.DeleteParameters["seriCuoi"].DefaultValue = e.Item.Cells[1].Text.Trim() + e.Item.Cells[3].Text.Trim().PadLeft(7, '0');

                int kq = ds.Delete();
                detailGrid.DataBind();
            }
        }
        catch (SqlException ex)
        {
        }
    }
    protected void detailGrid_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
        //    if (e.Item.ItemIndex < 0) return;
        //    Button cmdDel = (Button)e.Item.FindControl("cmdDelete");
        //    if (cmdDel != null) cmdDel.Attributes.Add("onclick", TTQTCommon.delete_Confirm);
    }
    protected void detailGrid_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
    {
        detailGrid.CurrentPageIndex = e.NewPageIndex;
        detailGrid.DataBind();
    }
    protected void cmdAddNewMaster_Click(object sender, EventArgs e)
    {
        hienPanel(false, true, false, false);
        lblMaHoaDon.Text = "";
    }
    protected void cmdExitEditMaster_Click(object sender, EventArgs e)
    {
        hienPanel(true, false, false, false);
    }
    protected void cmdCancelSaveMaster_Click(object sender, EventArgs e)
    {
        hienPanel(true, false, false, false);
    }
    private bool kiemTraLoiNhapHoaDon()
    {
        // ngày tháng:
        DateTime d;
        try
        {
            d = Convert.ToDateTime(txtNgayXuat.Value);
        }
        catch
        {
            MyWebUtils.MyWebUtil.alert(Page, "Ngày xuất sai định dạng");
            return false;
        }

        try
        {
            d = Convert.ToDateTime(txtNgayXuatThucTe.Value);
        }
        catch
        {
            MyWebUtils.MyWebUtil.alert(Page, "Ngày xuất thực tế sai định dạng");
            return false;
        }

        try
        {
            d = Convert.ToDateTime(txtNgayNhan.Value);
        }
        catch
        {
            MyWebUtils.MyWebUtil.alert(Page, "Ngày nhận sai định dạng");
            return false;
        }

        try
        {
            d = Convert.ToDateTime(txtNgayNhanThucTe.Value);
        }
        catch
        {
            MyWebUtils.MyWebUtil.alert(Page, "Ngày nhận thực tế sai định dạng");
            return false;
        }

        try
        {
            if (cboNguoiNhan.SelectedValue.Trim().Length < 1)
            {
                MyWebUtils.MyWebUtil.alert(Page, "Chưa chọn người nhận");
                return false;
            }
        }
        catch
        {
            return false;
        }

        return true;
    }
    protected void cmdSaveMaster_Click(object sender, EventArgs e)
    {
        /*Bắt lỗi nhập*/
        if (!kiemTraLoiNhapHoaDon()) return;
        if (lblMaHoaDon.Text.Equals("")) //lblMaHoaDon rỗng tức là đang ở chế độ thêm mới
        {
            // Thực hiện thêm mới hóa đơn
            string maHoaDon = "";
            SqlConnection conn = new SqlConnection(TTQTCommon.DBConnectionString);
            SqlCommand comm = new SqlCommand("HoaDon_Master_Insert", conn);
            comm.CommandType = CommandType.StoredProcedure;
            comm.Parameters.AddWithValue("@Nam", txtNam.Text);
            comm.Parameters.AddWithValue("@ngayxuat", TTQTCommon.convertDateString(txtNgayXuat.Value));
            comm.Parameters.AddWithValue("@NgayXuatThucTe", TTQTCommon.convertDateString(txtNgayXuatThucTe.Value));
            comm.Parameters.AddWithValue("@NgayNhan", TTQTCommon.convertDateString(txtNgayNhan.Value));

            comm.Parameters.AddWithValue("@NgayNhanThucTe", TTQTCommon.convertDateString(txtNgayNhanThucTe.Value));
            comm.Parameters.AddWithValue("@KhoXuat", UserInfo.MaKho.ToString());
            comm.Parameters.AddWithValue("@KhoNhan", cboKhoNhan.SelectedValue);
            comm.Parameters.AddWithValue("@NoiDung", txtNoiDung.Text);
            comm.Parameters.AddWithValue("@NguoiXuat", UserInfo.fullName);
            comm.Parameters.AddWithValue("@UserXuat", UserInfo.userName);
            comm.Parameters.AddWithValue("@NguoiNhan", cboNguoiNhan.SelectedItem.Text);
            comm.Parameters.AddWithValue("@userNhan", cboNguoiNhan.SelectedValue.Substring(0, cboNguoiNhan.SelectedValue.IndexOf(":_:")));
            comm.Parameters.AddWithValue("@CMNDNguoiNhan", cboNguoiNhan.SelectedValue.Substring(cboNguoiNhan.SelectedValue.IndexOf(":_:") + 3));
            comm.Parameters.AddWithValue("@LoaiGiaoDich", cboLoaiGiaoDich.SelectedValue);
            try
            {
                conn.Open();
                maHoaDon = Convert.ToString(comm.ExecuteScalar());
                if (!maHoaDon.Equals(""))
                {
                    masterGrid.DataBind();
                }
                lblMaHoaDon.Text = maHoaDon;
                hienPanel(false, true, true, false);
                conn.Close();
                comm.Dispose();
            }
            catch (Exception ex)
            {
                lblError.Text = "Co loi khi insert \n" + ex.ToString();
            }
        }
        if (!lblMaHoaDon.Text.Equals("")) //lblMaHoaDon không rỗng tức là đang ở chế độ sửa hóa đơn
        {
            // Thực hiện sửa hóa đơn
            string maHoaDon = "";
            SqlConnection conn = new SqlConnection(TTQTCommon.DBConnectionString);
            SqlCommand comm = new SqlCommand("HoaDon_Master_Update", conn);
            comm.CommandType = CommandType.StoredProcedure;
            comm.Parameters.AddWithValue("@Nam", txtNam.Text);
            comm.Parameters.AddWithValue("@maHoaDon", lblMaHoaDon.Text);
            comm.Parameters.AddWithValue("@ngayxuat", TTQTCommon.convertDateString(txtNgayXuat.Value));
            comm.Parameters.AddWithValue("@NgayXuatThucTe", TTQTCommon.convertDateString(txtNgayXuatThucTe.Value));
            comm.Parameters.AddWithValue("@NgayNhan", TTQTCommon.convertDateString(txtNgayNhan.Value));

            comm.Parameters.AddWithValue("@NgayNhanThucTe", TTQTCommon.convertDateString(txtNgayNhanThucTe.Value));
            comm.Parameters.AddWithValue("@KhoXuat", UserInfo.MaKho.ToString());
            comm.Parameters.AddWithValue("@KhoNhan", cboKhoNhan.SelectedValue);
            comm.Parameters.AddWithValue("@NoiDung", txtNoiDung.Text);
            comm.Parameters.AddWithValue("@NguoiXuat", UserInfo.fullName);
            comm.Parameters.AddWithValue("@UserXuat", UserInfo.userName);
            comm.Parameters.AddWithValue("@NguoiNhan", cboNguoiNhan.SelectedItem.Text);
            comm.Parameters.AddWithValue("@userNhan", cboNguoiNhan.SelectedValue.Substring(0, cboNguoiNhan.SelectedValue.IndexOf(":_:")));
            comm.Parameters.AddWithValue("@CMNDNguoiNhan", cboNguoiNhan.SelectedValue.Substring(cboNguoiNhan.SelectedValue.IndexOf(":_:") + 3));
            comm.Parameters.AddWithValue("@LoaiGiaoDich", cboLoaiGiaoDich.SelectedValue);
            try
            {
                conn.Open();
                maHoaDon = Convert.ToString(comm.ExecuteScalar());
                if (!maHoaDon.Equals(""))
                {
                    masterGrid.DataBind();
                }
                lblMaHoaDon.Text = maHoaDon;
                hienPanel(false, true, true, false);
                conn.Close();
                comm.Dispose();
            }
            catch (Exception ex)
            {
                lblError.Text = "Co loi khi update \n" + ex.ToString();
            }
        }

        //try
        //{
        //    ds.InsertCommandType = SqlDataSourceCommandType.StoredProcedure;
        //    ds.InsertCommand = "HoaDon_Master_Insert";
        //    ds.InsertParameters.Clear();
        //    //@nam varchar(4),
        //    ds.InsertParameters.Add(new Parameter("Nam"));
        //    ds.InsertParameters["Nam"].DefaultValue = txtNam.Text;
        //    //@malo int, tự tính max trong db
        //    //@mahoadon varchar(15), bằng nam+malo

        //    //@ngayxuat varchar(15),
        //    ds.InsertParameters.Add(new Parameter("ngayxuat"));
        //    ds.InsertParameters["ngayxuat"].DefaultValue = TTQTCommon.convertDateString(txtNgayXuat.Value);

        //    //@NgayXuatThucTe varchar(15),
        //    ds.InsertParameters.Add(new Parameter("NgayXuatThucTe"));
        //    ds.InsertParameters["NgayXuatThucTe"].DefaultValue = TTQTCommon.convertDateString(txtNgayXuatThucTe.Value);

        //    //@NgayNhan varchar(15),
        //    ds.InsertParameters.Add(new Parameter("NgayNhan"));
        //    ds.InsertParameters["NgayNhan"].DefaultValue =TTQTCommon.convertDateString( txtNgayNhan.Value);

        //    //@NgayNhanThucTe varchar(15),
        //    ds.InsertParameters.Add(new Parameter("NgayNhanThucTe"));
        //    ds.InsertParameters["NgayNhanThucTe"].DefaultValue = TTQTCommon.convertDateString(txtNgayNhanThucTe.Value);

        //    //@KhoXuat varchar(15),
        //    ds.InsertParameters.Add(new Parameter("KhoXuat"));
        //    ds.InsertParameters["KhoXuat"].DefaultValue = UserInfo.MaKho.ToString();

        //    //@KhoNhan varchar(15),
        //    ds.InsertParameters.Add(new Parameter("KhoNhan"));
        //    ds.InsertParameters["KhoNhan"].DefaultValue = cboKhoNhan.SelectedValue;

        //    //@NoiDung nvarchar(1000),
        //    ds.InsertParameters.Add(new Parameter("NoiDung"));
        //    ds.InsertParameters["NoiDung"].DefaultValue = txtNoiDung.Text;

        //    //@NguoiXuat nvarchar(100),
        //    ds.InsertParameters.Add(new Parameter("NguoiXuat"));
        //    ds.InsertParameters["NguoiXuat"].DefaultValue = UserInfo.fullName;

        //    //@UserXuat varchar(30),
        //    ds.InsertParameters.Add(new Parameter("UserXuat"));
        //    ds.InsertParameters["UserXuat"].DefaultValue = UserInfo.userName;

        //    //@NguoiNhan nvarchar(100)
        //    ds.InsertParameters.Add(new Parameter("NguoiNhan"));
        //    ds.InsertParameters["NguoiNhan"].DefaultValue = cboNguoiNhan.SelectedItem.Text;

        //    //@userNhan varchar(30), Phải tìm trong db căn cứ kho nhận
        //    ds.InsertParameters.Add(new Parameter("userNhan"));
        //    ds.InsertParameters["userNhan"].DefaultValue = cboNguoiNhan.SelectedValue.Substring(0, cboNguoiNhan.SelectedValue.IndexOf(":_:"));

        //    //@CMNDNguoiNhan varchar(30),
        //    ds.InsertParameters.Add(new Parameter("CMNDNguoiNhan"));
        //    ds.InsertParameters["CMNDNguoiNhan"].DefaultValue = cboNguoiNhan.SelectedValue.Substring(cboNguoiNhan.SelectedValue.IndexOf(":_:")+3);
        //    //@LoaiGiaoDich int gán luôn =1 rồi
        //    ds.InsertParameters.Add(new Parameter("LoaiGiaoDich"));
        //    ds.InsertParameters["LoaiGiaoDich"].DefaultValue = cboLoaiGiaoDich.SelectedValue;

        //    if (ds.Insert() > 0)
        //    {
        //        lblKetQuaInsert.Text = "Insert thành công!";
        //    }

        //}
        //catch (Exception ex)
        //{
        //    lblKetQuaInsert.Text = "Co loi khi insert \n" + ex.ToString();
        //}


    }
    protected void cmdAddDetail_Click(object sender, EventArgs e)
    {
        hienPanel(false, true, true, true);
        MyWebUtils.MyWebUtil.goToElement(Page, "chiTietHoaDon");
    }
    protected void cboKhoNhan_SelectedIndexChanged(object sender, EventArgs e)
    {
        cboNguoiNhan.DataBind();
    }
    protected void cboMaAnChi_SelectedIndexChanged(object sender, EventArgs e)
    {
        MyWebUtils.MyWebUtil.goToElement(Page, "chiTietHoaDon");
        cboSeri.DataBind();
        ds.SelectCommandType = SqlDataSourceCommandType.Text;
        ds.SelectCommand = "select * from MaAnChi where ma=" + cboMaAnChi.SelectedValue;
        DataTable t = ((DataView)ds.Select(new DataSourceSelectArguments())).ToTable();
        txtTinhChatAnChi.Text = t.Rows[0]["AnChiThuong"].ToString();
        txtDotPhatHanh.Text = t.Rows[0]["DotPhatHanh"].ToString();

        try
        {
            ds.SelectCommandType = SqlDataSourceCommandType.Text;
            ds.SelectCommand = "select top 1 DonGia from KhoAnChi where ma=" + cboMaAnChi.SelectedValue;
            t = ((DataView)ds.Select(new DataSourceSelectArguments())).ToTable();
            txtDonGia.Text = t.Rows[0]["DonGia"].ToString();
        }
        catch (Exception exxx)
        {
            txtDonGia.Text = "0";
        }

    }
    private bool kiemTraLoiNhapDetail()
    {
        // Kiểm tra lỗi nhập trên phần Detail
        int chiSoDau, chiSoCuoi;
        try
        {
            if (cboSeri.SelectedValue.Trim().Length < 1)
            {
                MyWebUtils.MyWebUtil.alert(Page, "Chưa chọn Seri");
                return false;
            }
        }
        catch
        {
            return false;
        }
        try
        {
            chiSoDau = Convert.ToInt32(txtChiSoDau.Text);
            if (chiSoDau < 1)
            {
                MyWebUtils.MyWebUtil.alert(Page, "Chỉ số đầu không hợp lệ");
                return false;
            }
        }
        catch
        {
            MyWebUtils.MyWebUtil.alert(Page, "Chỉ số đầu không hợp lệ");
            return false;
        }

        try
        {
            chiSoCuoi = Convert.ToInt32(txtChiSoCuoi.Text);
            if (chiSoCuoi < 1)
            {
                MyWebUtils.MyWebUtil.alert(Page, "Chỉ số cuối không hợp lệ");
                return false;
            }
        }
        catch
        {
            MyWebUtils.MyWebUtil.alert(Page, "Chỉ số cuối không hợp lệ");
            return false;
        }
        if (chiSoDau > chiSoCuoi)
        {
            MyWebUtils.MyWebUtil.alert(Page, "Chỉ số đầu không được lớn hơn chỉ số cuối");
            return false;
        }
        //Xong phần kiểm tra lỗi nhập thông tin Detail
        //Kiểm tra trạng thái trong database. Chỗ này phức tạp nhất
        //Mô tả quá trình tìm kiếm:
        ///Phải kiêm tra 2 trường hợp: Mã ấy có tồn tại không? Và ấn chỉ ấy có đúng là trạng thái = 1 không? Nếu không thỏa cả 2 điều kiện trên thì báo lỗi và dừng lại.
        StringBuilder b = new StringBuilder();
        SqlConnection conn = new SqlConnection(TTQTCommon.DBConnectionString);
        SqlCommand comm = new SqlCommand();
        comm.Connection = conn;
        comm.CommandType = CommandType.StoredProcedure;
        comm.CommandText = "KhoAnChi_KiemTraXuat";

        string ketQua = "";
        //Xây dựng câu truy vấn.
        //b.Append("(");
        //int soLuongDaKiemTra = 0;

        //for (int i = chiSoDau; i <= chiSoCuoi; i++)
        //{
        //    b.Append("'");
        //    b.Append(cboSeri.SelectedValue);
        //    b.Append(i.ToString().PadLeft(7, '0'));
        //    b.Append("',");
        //}
        //b.Remove(b.Length - 1, 1);
        //b.Append(")");
        //string sql = "select count(*) from KhoAnChi where Serial in " + b.ToString();
        //int len = sql.Length;

        try
        {
            comm.Parameters.AddWithValue("@serial1", cboSeri.SelectedValue + chiSoDau.ToString().PadLeft(7, '0'));
            comm.Parameters.AddWithValue("@serial2", cboSeri.SelectedValue + chiSoCuoi.ToString().PadLeft(7, '0'));
            comm.Parameters.AddWithValue("@SoLuongAnChi", chiSoCuoi - chiSoDau + 1);
            conn.Open();
            ketQua = Convert.ToString(comm.ExecuteScalar());
            if (!ketQua.Equals("ok"))
            {
                MyWebUtils.MyWebUtil.alert(Page, "Không đủ ấn chỉ. Hãy nhập lại các chỉ số đầu, chỉ số cuối!");
                return false;
            }
            //MyWebUtils.MyWebUtil.alert(Page, "Kết quả là: " + ketQua);
            conn.Close();
            comm.Dispose();
        }
        catch (Exception ex)
        {
            lblError.Text = "Co loi khi kiem tra so luong an chi \n" + ex.ToString();
            return false;
        }
        return true;
    }
    private void insertDetail()
    {
        SqlConnection conn = new SqlConnection(TTQTCommon.DBConnectionString);
        SqlCommand comm = new SqlCommand();
        SqlTransaction tran = null;
        int chiSoDau = 0, chiSoCuoi = 0;
        int MAX_LENGTH_SQL = 5000;
        chiSoDau = Convert.ToInt32(txtChiSoDau.Text);
        chiSoCuoi = Convert.ToInt32(txtChiSoCuoi.Text);
        try
        {
            conn.Open();
            tran = conn.BeginTransaction();
            comm.Connection = conn;
            comm.Transaction = tran;
            comm.CommandText = "HoaDon_Detail_Insert";
            comm.CommandType = CommandType.StoredProcedure;
            comm.Parameters.Clear();
            comm.Parameters.AddWithValue("@maHoaDon", lblMaHoaDon.Text);
            comm.Parameters.AddWithValue("@ngay", TTQTCommon.convertDateString(txtNgayNhan.Value));
            comm.Parameters.AddWithValue("@loaiGiaoDich", cboLoaiGiaoDich.SelectedValue);
            comm.Parameters.AddWithValue("@MaAnChi", cboMaAnChi.SelectedValue);
            comm.Parameters.AddWithValue("@LoaiAnChi", txtLoaiAnChi.Text);
            comm.Parameters.AddWithValue("@DotPhatHanh", txtDotPhatHanh.Text);
            comm.Parameters.AddWithValue("@tinhChatAnChi", txtTinhChatAnChi.Text);
            comm.Parameters.AddWithValue("@TrangThaiAC", txtTrangThaiAC.Text);
            //comm.Parameters.AddWithValue("@TrangThaiACMoi", txtTrangThaiACMoi.Text);
            comm.Parameters.AddWithValue("@KhoXuat", UserInfo.MaKho.ToString());
            comm.Parameters.AddWithValue("@KhoNhan", cboKhoNhan.SelectedValue);
            comm.Parameters.AddWithValue("@Seri", cboSeri.SelectedValue);
            comm.Parameters.AddWithValue("@ChiSoDau", txtChiSoDau.Text);
            comm.Parameters.AddWithValue("@ChiSoCuoi", txtChiSoCuoi.Text);
            comm.Parameters.AddWithValue("@GhiChu", txtGhiChu.Text);
            comm.Parameters.AddWithValue("@DonGia", txtDonGia.Text);
            int maDetail = TTQTCommon.ToInt32(comm.ExecuteScalar(), 0);
            comm.Parameters.Clear();
            //Nếu insert Detail thành công thì update trạng thái trong bảng KhoAnChi =2
            if (maDetail > 0)
            {
                comm.Parameters.Clear();
                comm.CommandText = "KhoAnChi_Update";
                comm.Parameters.AddWithValue("@Serial1", cboSeri.SelectedValue + chiSoDau.ToString().PadLeft(7, '0'));
                comm.Parameters.AddWithValue("@Serial2", cboSeri.SelectedValue + chiSoCuoi.ToString().PadLeft(7, '0'));
                comm.Parameters.AddWithValue("@status", 2);
                comm.Parameters.AddWithValue("@KhoXuat", UserInfo.MaKho);
                comm.Parameters.AddWithValue("@KhoNhan", cboKhoNhan.SelectedValue);
                comm.Parameters.AddWithValue("@KhoHienTai", "");
                int kq = comm.ExecuteNonQuery();
            }


            comm.Transaction.Commit();
            detailGrid.DataBind();
            tran.Dispose();
            conn.Dispose();
        }
        catch (Exception loi)
        {
            //Dong connection
            comm.Transaction.Rollback();
        }
    }
    private void updateDetail()
    {
        SqlConnection conn = new SqlConnection(TTQTCommon.DBConnectionString);
        SqlCommand comm = new SqlCommand();
        SqlTransaction tran = null;
        int chiSoDau = 0, chiSoCuoi = 0;
        try
        {
            conn.Open();
            tran = conn.BeginTransaction();
            comm.Connection = conn;
            comm.Transaction = tran;
            comm.CommandText = "HoaDon_Detail_Insert";
            comm.CommandType = CommandType.StoredProcedure;
            comm.Parameters.AddWithValue("@maHoaDon", lblMaHoaDon.Text);
            comm.Parameters.AddWithValue("@ngay", TTQTCommon.convertDateString(txtNgayNhan.Value));
            comm.Parameters.AddWithValue("@loaiGiaoDich", cboLoaiGiaoDich.SelectedValue);
            comm.Parameters.AddWithValue("@MaAnChi", cboMaAnChi.SelectedValue);
            comm.Parameters.AddWithValue("@LoaiAnChi", txtLoaiAnChi.Text);
            comm.Parameters.AddWithValue("@DotPhatHanh", txtDotPhatHanh.Text);
            comm.Parameters.AddWithValue("@tinhChatAnChi", txtTinhChatAnChi.Text);
            comm.Parameters.AddWithValue("@TrangThaiAC", txtTrangThaiAC.Text);
            //comm.Parameters.AddWithValue("@TrangThaiACMoi", txtTrangThaiACMoi.Text);
            comm.Parameters.AddWithValue("@KhoXuat", UserInfo.MaKho.ToString());
            comm.Parameters.AddWithValue("@KhoNhan", cboKhoNhan.SelectedValue);
            comm.Parameters.AddWithValue("@Seri", cboSeri.SelectedValue);
            comm.Parameters.AddWithValue("@ChiSoDau", txtChiSoDau.Text);
            comm.Parameters.AddWithValue("@ChiSoCuoi", txtChiSoCuoi.Text);
            comm.Parameters.AddWithValue("@GhiChu", txtGhiChu.Text);
            comm.Parameters.AddWithValue("@DonGia", txtDonGia.Text);
            int maDetail = TTQTCommon.ToInt32(comm.ExecuteScalar(), 0);
            comm.Parameters.Clear();
            //Nếu insert Detail thành công thì update trạng thái trong bảng KhoAnChi =2
            if (maDetail > 0)
            {
                StringBuilder b = new StringBuilder();

                for (int i = chiSoDau; i <= chiSoCuoi; i++)
                {
                    b.Append("'");
                    b.Append(cboSeri.SelectedValue);
                    b.Append(i.ToString().PadLeft(7, '0'));
                    b.Append("',");
                }
                b.Remove(b.Length - 1, 1);
                b.Append(")");
                string sql = "update KhoAnChi set status =2 where Serial in " + b.ToString();
                comm.CommandText = "proAddGuiHS";
                comm.CommandType = CommandType.StoredProcedure;
                comm.ExecuteScalar();
            }
            comm.Transaction.Commit();
            conn.Close();
            comm.Dispose();
            tran.Dispose();
        }
        catch (Exception)
        {
            //Dong connection
            comm.Transaction.Rollback();
        }
    }
    protected void cmdCapNhatDetail_Click(object sender, EventArgs e)
    {
        MyWebUtils.MyWebUtil.goToElement(Page, "chiTietHoaDon");
        if (!kiemTraLoiNhapDetail()) return;

        // Nếu đang ở chế độ thêm mới detail Sử dụng transaction để insert Detail và đổi trạng thái các ấn chỉ trong bảng KhoAnChi
        if (lblMaChiTiet.Text.Equals(""))
        {
            insertDetail();
        }

        // Nếu đang ở chế độ sửa detail Sử dụng transaction để update detail và đổi trạng thái các ấn chỉ trong bảng KhoAnChi
        if (!lblMaChiTiet.Text.Equals(""))
        {
            updateDetail();
        }

    }
    protected void cmdHuyBoDetail_Click(object sender, EventArgs e)
    {
        detailGrid.DataBind();
        MyWebUtils.MyWebUtil.goToElement(Page, "chiTietHoaDon");
    }
}
/*
            SqlConnection conn = new SqlConnection(TFCCommon.TFCConnectionString);
            SqlCommand comm = new SqlCommand();
            SqlTransaction tran = null;
            try
            {
                conn.Open();
                tran = conn.BeginTransaction();
                comm.Connection = conn;
                comm.Transaction = tran;
                comm.CommandText = "proUpdateTranStatus";
                comm.CommandType = CommandType.StoredProcedure;
                comm.Parameters.AddWithValue("@TranCode", tranCode);
                comm.Parameters.AddWithValue("@Status", status);

                comm.ExecuteNonQuery();
                comm.Parameters.Clear();

                comm.CommandText = "proAddGuiHS";
                comm.CommandType = CommandType.StoredProcedure;
                comm.Parameters.AddWithValue("@tableName", info.TableName);
                comm.Parameters.AddWithValue("@User_Id_Gui", info.User_Id_Gui);
                comm.Parameters.AddWithValue("@User_Id_Nhan", info.User_Id_Nhan);
                comm.Parameters.AddWithValue("@Brn_Code_Gui", info.Brn_Code_Gui);
                comm.Parameters.AddWithValue("@Brn_Code_Nhan", info.Brn_Code_Nhan);
                comm.Parameters.AddWithValue("@Tran_Code", info.Tran_Code);
                comm.ExecuteScalar();
                comm.Transaction.Commit();
                conn.Close();
                comm.Dispose();
                tran.Dispose();
            }
            catch (Exception)
            {
                //Dong connection
                comm.Transaction.Rollback();
            }
*/